package net.adriana.esaytool.util;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import net.adriana.esaytool.annotation.ColumnName;

/**
 * 结果集自动转换成java bean Util
 * @author Administrator
 *
 */
public class BeanUtil {

	/**
	 * JavaBean 实现
	 * @param rs 需要被转换的结果集
	 * @param clazz 需要转换成的类
	 * @return
	 * @throws Exception
	 */
	public static Object beanFill(ResultSet rs,Class<?> clazz) throws Exception{
			//获取所有字段
			Field[] fields = clazz.getDeclaredFields();
			//对象实例化
			Object ob = clazz.newInstance();
			if(rs.next()){
				for (Field field : fields) {
					//通过判断是否有注解来获取数据库中对应的列名
					if(field.isAnnotationPresent(ColumnName.class)){
						String columnName = field.getAnnotation(ColumnName.class).value();
						Class<?> type = field.getType();
						field.setAccessible(true);
						field.set(ob, ConvertUtil.convert(rs.getString(columnName),type));
					}	
				}
			}
			
		return ob;
		
	}
	
	/**
	 * JavaBean 实现
	 * @param rs 需要被转换的结果集
	 * @param clazz 需要转换成的类
	 * @return
	 * @throws Exception
	 */
	public static Object listFill(ResultSet rs,Class<?> clazz) throws Exception{
			//获取所有字段
			Field[] fields = clazz.getDeclaredFields();
			//创建集合
			List<Object> list = new ArrayList<>();
			while(rs.next()){
				//实例化对象
				Object ob = clazz.newInstance();
				for (Field field : fields) {
					//通过判断是否有注解来获取数据库中对应的列名
					if(field.isAnnotationPresent(ColumnName.class)){
						String columnName = field.getAnnotation(ColumnName.class).value();
						Class<?> type = field.getType();
						field.setAccessible(true);
						field.set(ob, ConvertUtil.convert(rs.getString(columnName),type));
					}
				}
				list.add(ob);
			}
			
		
		return list;
		
	}
}
